package com.hl.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;

/**
 * 售后详情对象 after_sales_service
 * 
 * @author ruoyi
 * @date 2025-08-08
 */
public class AfterSalesService extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    private Integer id;

    /** 售后服务单号/退货退款编号 */
    @Excel(name = "售后服务单号/退货退款编号")
    private String serviceNo;

    /** 订单编号 */
    @Excel(name = "订单编号")
    private String orderNo;

    /** 店铺ID */
    @Excel(name = "店铺ID")
    private Integer shopId;

    /** 买家ID */
    @Excel(name = "买家ID")
    private Integer buyerId;

    /** 会员名称/买家名称 */
    @Excel(name = "会员名称/买家名称")
    private String buyerName;

    /** 商品ID */
    @Excel(name = "商品ID")
    private Integer productId;

    /** 商品图片 */
    @Excel(name = "商品图片")
    private String productImage;

    /** 商品数量 */
    @Excel(name = "商品数量")
    private Integer productQuantity;

    /** 退货数量 */
    @Excel(name = "退货数量")
    private Integer returnQuantity;

    /** 售后类型(1:退货,2退款) */
    @Excel(name = "售后类型(1:退货,2退款)")
    private Integer afterSalesType;

    /** 售后状态(1申请中，2通过售后，3拒绝售后，4待收货，5确认收货，6完成售后，7卖家终止售后，8买家取消售后) */
    @Excel(name = "售后状态(1申请中，2通过售后，3拒绝售后，4待收货，5确认收货，6完成售后，7卖家终止售后，8买家取消售后)")
    private Integer afterSalesStatus;

    /** 退货状态 */
    @Excel(name = "退货状态")
    private Integer returnStatus;

    /** 退货退款原因 */
    @Excel(name = "退货退款原因")
    private String reason;

    /** 问题描述 */
    @Excel(name = "问题描述")
    private String description;

    /** 申请退款金额 */
    @Excel(name = "申请退款金额")
    private BigDecimal applyAmount;

    /** 实际退款金额 */
    @Excel(name = "实际退款金额")
    private BigDecimal actualAmount;

    /** 退款时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "退款时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date refundTime;

    /** 退款方式(1:原路退回, 2:银行卡退款, 3:其他) */
    @Excel(name = "退款方式(1:原路退回, 2:银行卡退款, 3:其他)")
    private Integer refundMethod;

    /** 银行开户行 */
    @Excel(name = "银行开户行")
    private String bankName;

    /** 银行开户行名 */
    @Excel(name = "银行开户行名")
    private String bankAccountName;

    /** 银行卡号 */
    @Excel(name = "银行卡号")
    private String bankCardNumber;

    /** 商家名称 */
    @Excel(name = "商家名称")
    private String sellerName;

    /** 是否同意：0同意，1拒绝 */
    @Excel(name = "是否同意：0同意，1拒绝")
    private Integer isApproved;

    /** 商家备注信息 */
    @Excel(name = "商家备注信息")
    private String sellerRemark;

    /** 买家备注信息 */
    @Excel(name = "买家备注信息")
    private String buyerRemark;

    /** 凭证(可存储多个凭证URL，JSON格式) */
    @Excel(name = "凭证(可存储多个凭证URL，JSON格式)")
    private String evidence;

    /** 申请时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date applyTime;


    /** 售后物流信息信息 */
    private List<AfterSalesLogistics> afterSalesLogisticsList;


    // ========== 以下为物流相关信息，通过关联查询获取 ==========
    
    /** 收货商家姓名 (从店铺信息表关联获取) */
    private String receiverName;
    
    /** 收货商家手机 (从店铺信息表关联获取) */
    private String receiverPhone;
    
    /** 收货地址 (从店铺信息表关联获取) */
    private String receiverAddress;
    
    /** 物流公司 (从物流信息表关联获取) */
    private String logisticsCompany;
    
    /** 物流单号 (从物流信息表关联获取) */
    private String logisticsNo;
    
    /** 商品名称 (扩展字段) */
    private String productName;

    public void setId(Integer id) 
    {
        this.id = id;
    }

    public Integer getId() 
    {
        return id;
    }

    public void setServiceNo(String serviceNo) 
    {
        this.serviceNo = serviceNo;
    }

    public String getServiceNo() 
    {
        return serviceNo;
    }

    public void setOrderNo(String orderNo) 
    {
        this.orderNo = orderNo;
    }

    public String getOrderNo() 
    {
        return orderNo;
    }

    public void setShopId(Integer shopId) 
    {
        this.shopId = shopId;
    }

    public Integer getShopId() 
    {
        return shopId;
    }

    public void setBuyerId(Integer buyerId) 
    {
        this.buyerId = buyerId;
    }

    public Integer getBuyerId() 
    {
        return buyerId;
    }

    public void setBuyerName(String buyerName) 
    {
        this.buyerName = buyerName;
    }

    public String getBuyerName() 
    {
        return buyerName;
    }

    public void setProductId(Integer productId) 
    {
        this.productId = productId;
    }

    public Integer getProductId() 
    {
        return productId;
    }

    public void setProductImage(String productImage) 
    {
        this.productImage = productImage;
    }

    public String getProductImage() 
    {
        return productImage;
    }

    public void setProductQuantity(Integer productQuantity) 
    {
        this.productQuantity = productQuantity;
    }

    public Integer getProductQuantity() 
    {
        return productQuantity;
    }

    public void setReturnQuantity(Integer returnQuantity) 
    {
        this.returnQuantity = returnQuantity;
    }

    public Integer getReturnQuantity() 
    {
        return returnQuantity;
    }

    public void setAfterSalesType(Integer afterSalesType) 
    {
        this.afterSalesType = afterSalesType;
    }

    public Integer getAfterSalesType() 
    {
        return afterSalesType;
    }

    public void setAfterSalesStatus(Integer afterSalesStatus) 
    {
        this.afterSalesStatus = afterSalesStatus;
    }

    public Integer getAfterSalesStatus() 
    {
        return afterSalesStatus;
    }

    public void setReturnStatus(Integer returnStatus) 
    {
        this.returnStatus = returnStatus;
    }

    public Integer getReturnStatus() 
    {
        return returnStatus;
    }

    public void setReason(String reason) 
    {
        this.reason = reason;
    }

    public String getReason() 
    {
        return reason;
    }

    public void setDescription(String description) 
    {
        this.description = description;
    }

    public String getDescription() 
    {
        return description;
    }

    public void setApplyAmount(BigDecimal applyAmount) 
    {
        this.applyAmount = applyAmount;
    }

    public BigDecimal getApplyAmount() 
    {
        return applyAmount;
    }

    public void setActualAmount(BigDecimal actualAmount) 
    {
        this.actualAmount = actualAmount;
    }

    public BigDecimal getActualAmount() 
    {
        return actualAmount;
    }

    public void setRefundTime(Date refundTime) 
    {
        this.refundTime = refundTime;
    }

    public Date getRefundTime() 
    {
        return refundTime;
    }

    public void setRefundMethod(Integer refundMethod) 
    {
        this.refundMethod = refundMethod;
    }

    public Integer getRefundMethod() 
    {
        return refundMethod;
    }

    public void setBankName(String bankName) 
    {
        this.bankName = bankName;
    }

    public String getBankName() 
    {
        return bankName;
    }

    public void setBankAccountName(String bankAccountName) 
    {
        this.bankAccountName = bankAccountName;
    }

    public String getBankAccountName() 
    {
        return bankAccountName;
    }

    public void setBankCardNumber(String bankCardNumber) 
    {
        this.bankCardNumber = bankCardNumber;
    }

    public String getBankCardNumber() 
    {
        return bankCardNumber;
    }

    public void setSellerName(String sellerName) 
    {
        this.sellerName = sellerName;
    }

    public String getSellerName() 
    {
        return sellerName;
    }

    public void setIsApproved(Integer isApproved) 
    {
        this.isApproved = isApproved;
    }

    public Integer getIsApproved() 
    {
        return isApproved;
    }

    public void setSellerRemark(String sellerRemark) 
    {
        this.sellerRemark = sellerRemark;
    }

    public String getSellerRemark() 
    {
        return sellerRemark;
    }

    public void setBuyerRemark(String buyerRemark) 
    {
        this.buyerRemark = buyerRemark;
    }

    public String getBuyerRemark() 
    {
        return buyerRemark;
    }

    public void setEvidence(String evidence) 
    {
        this.evidence = evidence;
    }

    public String getEvidence() 
    {
        return evidence;
    }

    public void setApplyTime(Date applyTime) 
    {
        this.applyTime = applyTime;
    }

    public Date getApplyTime() 
    {
        return applyTime;
    }

    public void setReceiverName(String receiverName) 
    {
        this.receiverName = receiverName;
    }

    public String getReceiverName() 
    {
        return receiverName;
    }

    public void setReceiverPhone(String receiverPhone) 
    {
        this.receiverPhone = receiverPhone;
    }

    public String getReceiverPhone() 
    {
        return receiverPhone;
    }

    public void setReceiverAddress(String receiverAddress) 
    {
        this.receiverAddress = receiverAddress;
    }

    public String getReceiverAddress() 
    {
        return receiverAddress;
    }

    public void setLogisticsCompany(String logisticsCompany) 
    {
        this.logisticsCompany = logisticsCompany;
    }

    public String getLogisticsCompany() 
    {
        return logisticsCompany;
    }

    public void setLogisticsNo(String logisticsNo) 
    {
        this.logisticsNo = logisticsNo;
    }

    public String getLogisticsNo() 
    {
        return logisticsNo;
    }

    public void setProductName(String productName) 
    {
        this.productName = productName;
    }

    public String getProductName() 
    {
        return productName;
    }

    public List<AfterSalesLogistics> getAfterSalesLogisticsList()
    {
        return afterSalesLogisticsList;
    }

    public void setAfterSalesLogisticsList(List<AfterSalesLogistics> afterSalesLogisticsList)
    {
        this.afterSalesLogisticsList = afterSalesLogisticsList;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("serviceNo", getServiceNo())
            .append("orderNo", getOrderNo())
            .append("shopId", getShopId())
            .append("buyerId", getBuyerId())
            .append("buyerName", getBuyerName())
            .append("productId", getProductId())
            .append("productImage", getProductImage())
            .append("productQuantity", getProductQuantity())
            .append("returnQuantity", getReturnQuantity())
            .append("afterSalesType", getAfterSalesType())
            .append("afterSalesStatus", getAfterSalesStatus())
            .append("returnStatus", getReturnStatus())
            .append("reason", getReason())
            .append("description", getDescription())
            .append("applyAmount", getApplyAmount())
            .append("actualAmount", getActualAmount())
            .append("refundTime", getRefundTime())
            .append("refundMethod", getRefundMethod())
            .append("bankName", getBankName())
            .append("bankAccountName", getBankAccountName())
            .append("bankCardNumber", getBankCardNumber())
            .append("sellerName", getSellerName())
            .append("isApproved", getIsApproved())
            .append("sellerRemark", getSellerRemark())
            .append("buyerRemark", getBuyerRemark())
            .append("evidence", getEvidence())
            .append("applyTime", getApplyTime())
            .append("updateTime", getUpdateTime())
            .append("afterSalesLogisticsList", getAfterSalesLogisticsList())
            .toString();
    }
}
